package com.xuanwei.core.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xuanwei.core.entity.bo.NameBo;
import com.xuanwei.core.entity.vo.*;
import com.xuanwei.core.entity.param.Coupon;
import com.xuanwei.dao.entity.XwCoupon;

import java.util.List;

/**
 * <p>
 * 优惠券 服务类
 * </p>
 *
 * @author mjy
 * @since 2019-07-16
 */
public interface IXwCouponService extends IService<XwCoupon> {


    /**
     * 获取优惠券
     *
     * @param userId 用户ID
     * @param id     优惠券ID
     */
    void obtainCoupon(Integer userId, Integer id);

    /**
     * 添加优惠券
     *
     * @param coupon 参数
     */
    void add(Coupon coupon);

    /**
     * 修改优惠券
     *
     * @param id             ID
     * @param explainText    说明
     * @param limitSendTotal 总放放
     * @param limitPre       每人限制
     */
    void update(Integer id, String explainText, Integer limitSendTotal, Integer limitPre);

    /**
     * 修改状态(作废)
     *
     * @param id ID
     */
    void updateStatus(Integer id);

    /**
     * 列表
     *
     * @param type      状态 0满减型 1无门栏
     * @param limitType 0 无限制1限制商品
     * @return 列表
     */
    Page<CouponListVo> list(Integer type, Integer limitType, String name, Page<XwCoupon> page);

    /**
     * 删除
     *
     * @param id ID
     */
    void delete(Integer id);

    /**
     * 搜索商品
     *
     * @param productId 商品ID
     * @param name      商品名称
     * @return 集合
     */
    List<ProductSimpleVo> search(Integer productId, String name);


    /**
     * 查询所有活动
     *
     * @return 集合
     */
    List<NameBo> findAllActivity();


    /**
     * 查询所有的商品券
     *
     * @return 集合
     */
    List<CouponProductVo> findProductCoupon(Integer userId);

    /**
     * 查询所有的活动券以及无门栏券
     *
     * @return 集合
     */
    List<ActivityCouponVo> findExceptCoupon(Integer userId);


    /**
     * 查询适合该商品的券
     *
     * @return 集合
     */
    List<CouponVo> findCouponByProduct(Integer productId, Integer userId);
}
